import java.util.Arrays;

public class CharMixDis {
    public int[] shortestToChar(String s, char c) {
//        char[] chars = s.toCharArray();
//        int[] dis = new int[chars.length];
//        int d1=0,d2=0;
//        for (int i=0;i<chars.length;i++) {
//            char cw = chars[i];
//            //从后往前判断
//            for (int k = i; k >=0 ; k--) {
//                if (chars[k]==c){
//                    d1 = i - k;
//                    break;
//                }
//                d1=10001;
//
//            }
//            //从前往后判断
//            for(int j=i;j<chars.length;j++){
//                if(chars[j]==c){
//                    d1 = (j - i)>d1?d1:(j - i);
//                    break;
//                }
//            }
//            dis[i]=d1;
//        }
//        return dis;


//        int N = s.length();
//        int[] ans = new int[N];
//        int prev = Integer.MIN_VALUE / 2;
//        for (int i = 0; i < N; ++i) {
//            if (s.charAt(i) == c) {
//                prev = i;
//            }
//            ans[i] = i - prev;
//            System.out.println(ans[i]);
//        }
//
//        prev = Integer.MAX_VALUE / 2;
//        for (int i = N-1; i >= 0; --i) {
//            if (s.charAt(i) == c) {
//                prev = i;
//            }
//            ans[i] = Math.min(ans[i], prev - i);
//        }
//        return ans;

        char[] arrS=s.toCharArray();
        int[] index1 = getMinDistance(arrS,c);
        char[] arrSReverse = reverseCharArr(arrS);
        int[] index2 = reverseIntArr(getMinDistance(arrSReverse,c));
        for(int i=0;i<index1.length;i++){
            if(index1[i]==0&&index2[i]==0){
                index1[i] = 0;
            } else if(index1[i]*index2[i]==0){
                index1[i] = index1[i]+index2[i];
            } else {
                index1[i] = Math.min(index1[i],index2[i]);
            }
        }
        return index1;
    }
    //获取单向最短距离
    private int[] getMinDistance(char[] arr,char C){
        int[] distanceArray = new int[arr.length];
        int index = 0;
        boolean meetE = false;
        for(int i =0;i<arr.length;i++){
            if(arr[i]==C){
                index = 0;
                meetE =true;
            }
            distanceArray[i]=index;
            if(meetE){
                index++;
            }
        }
        return distanceArray;
    }
    //反转数组
    private int[] reverseIntArr(int[] arr){
        if(arr.length==0){
            return arr;
        }
        int i=0;
        int j=arr.length-1;
        while(i<j){
            int temp = arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
            i++;
            j--;
        }
        return arr;
    }
    //反转数组
    private char[] reverseCharArr(char[] arr){
        if(arr.length==0){
            return arr;
        }
        int i=0;
        int j=arr.length-1;
        while(i<j){
            char temp = arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
            i++;
            j--;
        }
        return arr;

    }

    public static void main(String[] args) {
        CharMixDis charMixDis = new CharMixDis();
        int[] ints = charMixDis.shortestToChar("loveleetcode", 'e');
        System.out.println(Arrays.toString(ints));
    }
}
